﻿using BO;
using CadastroBase.Consultas;
using JMI_Nucleo.Classe;
using JMI_Nucleo.View.Form_Util;
using Microsoft.VisualBasic;
using OR;
using OR.Enumerador;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CadastroBase
{
    public partial class FrmFuncionario : JMI_Nucleo.View.Form_Base.FrmBaseCadastro001
    {
        private mFuncionario _mFuncionario = null;
        private Funcionario funcionario = null;
        private mCep _InfoCep;
        private CategoriaFuncionario categoriaFuncionario = null;
        private List<mCategoriaFuncionario> lstCategoria = null;
        
        private bool sucesso;        

        public FrmFuncionario()
        {
            InitializeComponent();
        }

        private void Inicializa()
        {
            CboCategoria.Items.Clear();

            categoriaFuncionario = new CategoriaFuncionario();
            lstCategoria = categoriaFuncionario.GetLista(Empresa.XMLEmpresa.GetCodigoEmpresa());

            if (lstCategoria != null && lstCategoria.Count > 0)
                lstCategoria.ForEach(p => CboCategoria.Items.Add(p.Descricao));

            CidadePadrao = "JABOTICABAL";
            UfPadrao = "SP";
            base.MudaControleRecursivo(this.Controls, 2);
        }

        private void FrmFuncionario_Load(object sender, EventArgs e)
        {
            Inicializa();
        }

        private void PopulaPropriedade()
        {
            JMIUtil jmiUtil = new JMIUtil();

            categoriaFuncionario = new CategoriaFuncionario();
            if (Acao == 'A') 
            { 
                _mFuncionario.Codigo = Convert.ToInt32(TxtCodigo.Text);
                _mFuncionario.DataAlteracao = DateTime.Today;
            }
            _mFuncionario.Pessoa.Nome = TxtNome.Text;
            if (!String.IsNullOrEmpty(CboCategoria.Text))
                _mFuncionario.CodigoCategoria = categoriaFuncionario.GetCodigo(CboCategoria.Text, Empresa.XMLEmpresa.GetCodigoEmpresa());
            _mFuncionario.CodigoEmpresa = Empresa.XMLEmpresa.GetCodigoEmpresa();
            _mFuncionario.CodigoUsuario = Usuario.XMLUsuario.GetCodigoUsuario();
            _mFuncionario.Pessoa.RG = TxtRg.Text;
            _mFuncionario.Pessoa.CPF = jmiUtil.RemoveMascara(MskCpf.Text);
            _mFuncionario.Funcao = TxtFuncao.Text;
            _mFuncionario.Admissao = jmiUtil.AjustaData(MskAdmissao.Text);
            _mFuncionario.ComissaoVista = Convert.ToDecimal(TxtComissaoVista.Text);
            _mFuncionario.ComissaoPrazo = Convert.ToDecimal(TxtComissaoPrazo.Text);
            _mFuncionario.ComissaoPromocao = Convert.ToDecimal(TxtComissaoPromocao.Text);
            _mFuncionario.Observacao = TxtObs.Text;
            _mFuncionario.Demissao = jmiUtil.AjustaData(MskDemissao.Text);
            _mFuncionario.Contato.Telefone1 = TxtTelefone.Text;
            _mFuncionario.Contato.Celular = TxtCelular.Text;
            _mFuncionario.Contato.Email1 = TxtEmail.Text;
            _mFuncionario.Endereco.TipoLogradouro = CboTipoLogradouro.Text;
            _mFuncionario.Endereco.Logradouro = TxtEndereco.Text;
            _mFuncionario.Endereco.Numero = TxtNumero.Text;
            _mFuncionario.Endereco.Cep = jmiUtil.RemoveMascara(MskCep.Text);
            _mFuncionario.Endereco.Bairro = TxtBairro.Text;
            _mFuncionario.Endereco.Cidade = TxtCidade.Text;
            _mFuncionario.Endereco.UF = CboUF.Text;
            _mFuncionario.Endereco.Complemento = TxtComplemento.Text;
            _mFuncionario.Endereco.Tipo = eTipoEndereco.Residencial;
        }

        private void PopulaComponente(mFuncionario obj)
        {
            categoriaFuncionario = new CategoriaFuncionario();

            if (obj.Codigo == 0)
            {
                TxtStatus.Text = "Registro não encontrado.";
                base.TrocaIconeAviso(3);
            }
            else
            {
                JMIUtil objUtil = new JMIUtil();
                TxtCodigo.Text = obj.Codigo.ToString();
                ChkAtivo.Checked = obj.Ativo;
                TxtNome.Text = obj.Pessoa.Nome;
                CboCategoria.Text = categoriaFuncionario.GetDescricao(obj.Codigo, Empresa.XMLEmpresa.GetCodigoEmpresa());
                TxtRg.Text = obj.Pessoa.RG;
                MskCpf.Text = obj.Pessoa.CPF;
                TxtFuncao.Text = obj.Funcao;
                MskAdmissao.Text = obj.Admissao == DateTime.MinValue ? String.Empty : obj.Admissao.ToShortDateString();
                TxtComissaoVista.Text = obj.ComissaoVista.ToString();
                TxtComissaoPrazo.Text = obj.ComissaoPrazo.ToString();
                TxtComissaoPromocao.Text = obj.ComissaoPromocao.ToString();
                TxtObs.Text = obj.Observacao;
                MskDemissao.Text = obj.Demissao == DateTime.MinValue ? String.Empty : obj.Demissao.ToShortDateString();
                TxtTelefone.Text = obj.Contato.Telefone1;
                TxtCelular.Text = obj.Contato.Celular;
                TxtEmail.Text = obj.Contato.Email1;
                CboTipoLogradouro.Text = obj.Endereco.TipoLogradouro;
                TxtEndereco.Text = obj.Endereco.Logradouro;
                TxtNumero.Text = obj.Endereco.Numero;
                MskCep.Text = obj.Endereco.Cep;
                TxtBairro.Text = obj.Endereco.Bairro;
                TxtCidade.Text = obj.Endereco.Cidade;
                CboUF.Text = obj.Endereco.UF;
                TxtComplemento.Text = obj.Endereco.Complemento;
                TxtDataAlteracao.Text = objUtil.AjustaDataAlteracao(obj.DataAlteracao);
            }
        }

        private void BtnBuscaCEP_Click(object sender, EventArgs e)
        {
            FrmBuscaCep form = new FrmBuscaCep();
            form.ShowDialog();
            _InfoCep = form.InfoCep;
            if (_InfoCep != null)
            {
                CboTipoLogradouro.Text = _InfoCep.TipoLogradouro;
                TxtEndereco.Text = _InfoCep.Logradouro;
                MskCep.Text = _InfoCep.Cep;
                TxtBairro.Text = _InfoCep.Bairro;
                TxtCidade.Text = _InfoCep.Cidade;
                CboUF.Text = _InfoCep.UF;
                TxtNumero.Focus();
            }
        }

        private void BtnLimpar_Click(object sender, EventArgs e)
        {
        }

       private void BtnBuscaPorCodigo_Click(object sender, EventArgs e)
       {
            string retorno = Interaction.InputBox("Informe o código para pesquisa", "Pesquisa por Código");

            if (!String.IsNullOrEmpty(retorno))
            {
                _mFuncionario = funcionario.GetFuncionario(Convert.ToInt32(retorno), Empresa.XMLEmpresa.GetCodigoEmpresa());
                if (_mFuncionario != null)
                {
                    PopulaComponente(_mFuncionario);
                    base.Pesquisar();
                }
            }
        }

        private void BtnAlterar_Click(object sender, EventArgs e)
        {
            TxtNome.Focus();
        }

        private void BtnIncluir_Click(object sender, EventArgs e)
        {
            _mFuncionario = new mFuncionario();
            funcionario = new Funcionario();

            CboCategoria.Items.Clear();

            categoriaFuncionario = new CategoriaFuncionario();
            lstCategoria = categoriaFuncionario.GetLista(Empresa.XMLEmpresa.GetCodigoEmpresa());

            if (lstCategoria != null && lstCategoria.Count > 0)
                lstCategoria.ForEach(p => CboCategoria.Items.Add(p.Descricao));

            base.MudaControleRecursivo(this.Controls, 1);
       
            TxtNome.Focus();
        }

        private void BtnConfirma_Click(object sender, EventArgs e)
        {
            sucesso = funcionario.Excluir(_mFuncionario);
            if (sucesso)
            {
                base.MudaControleRecursivo(this.Controls, 2);
                base.Limpar(this.Controls);
                TxtStatus.Text = "Dados excluidos com sucesso ...";
                base.Salvar();
            }
        }

        private void BtnSalvar_Click(object sender, EventArgs e)
        {
            TxtStatus.Text = String.Empty;
            TrocaIconeAviso(1);
            
            PopulaPropriedade();
            sucesso = funcionario.Salvar(_mFuncionario, Acao);
            if (sucesso)
            {
                base.MudaControleRecursivo(this.Controls, 2);
                base.Limpar(this.Controls);
                TxtStatus.Text = "Dados gravados com sucesso ...";
                base.Salvar();
            }
            else
            {
                base.Salvar(false);
                base.MudaControleRecursivo(this.Controls, 1);
                if (!String.IsNullOrEmpty(funcionario.MsgErro))
                {
                    TrocaIconeAviso(2);
                    TxtStatus.Text = funcionario.MsgErro;
                }
                TxtNome.Focus();
            }            
        }

        private void BtnPesquisa_Click(object sender, EventArgs e)
        {
            FrmConFuncionario frmConsulta = new FrmConFuncionario();
            frmConsulta.Titulo = "Consulta de Funcionários";
            frmConsulta.ShowDialog();

            if (frmConsulta.CampoRetorno > 0)
            {
                _mFuncionario = funcionario.GetFuncionario(frmConsulta.CampoRetorno, Empresa.XMLEmpresa.GetCodigoEmpresa());
                if (_mFuncionario != null)
                {
                    PopulaComponente(_mFuncionario);
                    base.Pesquisar();
                }
            }
        }       
    }
}
